/**
 * Created by charsen on 2017/8/10.
 */
var notneeded = ['运费', '邮费', '拖鞋', '凉鞋', '背包', '清洗剂', '擦鞋', '清洁', '工具', '毛刷', '轻便', '纸巾', '沙滩', '裤', '喷雾', '拍卖', '断码', '背包', '书包', '网球'];

window.onload = function () {
    setTimeout(function () {
        var links = [];

        var next = function () {
            if (links.length) {
                setTimeout(function () {
                    scrapy(links.shift().getAttribute('data-id'), next);
                }, Math.random() * 3000);
            } else {
                if (document.querySelector('.J_SearchAsync.next')) {
                    document.querySelector('.J_SearchAsync.next').click();
                } else {
                    $.get("http://127.0.0.1:5000/sendEmail", {"msg": "success"});
                }
            }
        }

        for (var i = 0, items = document.querySelectorAll('.shop-hesper-bd.grid .item3line1 dl'); i < items.length; i++) {
            var title = items[i].innerText;
            var valid = true;

            // 过滤掉不需要的宝贝
            for (var j = 0; j < notneeded.length; j++) {
                if (title.indexOf(notneeded[j]) != -1) {
                    valid = false;
                }
            }

            if (valid) {
                links.push(items[i]);
            }
        }

        // 0点的时候开始爬取
        if (links.length && new Date().getHours() == 0) {
            scrapy(links.shift().getAttribute('data-id'), next);
        }
    }, 1000);
}

function scrapy(itemNumId, fn) {
    getdetail(itemNumId, function (response) {
        // 如果response为空或者undefined那么久直接调用回调函数
        if (!response) {
            return fn();
        }

        var item = response.data.item;
        var seller = response.data.seller;

        if (isEmpty(response.data.skuBase)) {
            return fn();
        }

        var props = response.data.skuBase.props; // 代号

        // 如果没有尺寸代号数据和款式代号数据
        if (!props.length) {
            return fn();
        }

        // 尺寸代号
        var sizeProps = props[0] || {};

        // 款式代号
        var modelProps = props[1] || {};

        var skus = response.data.skuBase.skus;

        var stockData = null;

        try {
            stockData = JSON.parse(response.data.apiStack[0].value);
        } catch (e) {
            console.log('发生json解析错误，跳过此宝贝');
            return fn();
        }

        var sku2info = stockData.skuCore.sku2info;
        var stocks = [];

        for (var skuId in sku2info) {
            if (skuId == '0') {
                continue;
            }

            var propPath = getPropPathBySkuId(skus, skuId);

            stocks.push({
                stock: sku2info[skuId].quantity,
                price: sku2info[skuId].price ? sku2info[skuId].price.priceText : 0,
                size: getSizeByCode(sizeProps.values, propPath.split(';')[0].split(':')[1]),
                model: getModelByCode(modelProps.values, propPath.split(';')[1].split(':')[1])
            });
        }

        $.post("http://127.0.0.1:5000/scrapy", {
            "product": JSON.stringify({
                "shopName": seller.shopName || "",
                "favcount": item.favcount || 0,
                "title": item.title || "",
                "data": stocks
            })
        });

        fn();
    });
}

function getdetail(itemNumId, fn, n) {
    if (n === undefined) {
        n = 0;
    }

    $.get("https://api.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/", {
        "v": "6.0",
        "type": "json",
        "dataType": "json",
        "appKey": "12574478",
        "t": "1471594755592",
        "ttid": "2013@taobao_h5_1.0.0",
        "api": "mtop.taobao.detail.getdetail",
        "data": JSON.stringify({"itemNumId": itemNumId, "exParams": JSON.stringify({"id": itemNumId})})
    }, function (response) {
        // 如果存在异常那么首先继续尝试几次，如果若干次以后一直出现错误那么跳过这个宝贝
        if (!response || !response.data || !response.data.item || !response.data.seller) {
            if (n > 4) {
                fn();
            } else {
                setTimeout(function () {
                    getdetail(itemNumId, fn, n += 1);
                }, 2000);
            }
        } else {
            fn(response);
        }
    }).error(function () {
        if (n > 4) {
            fn();
        } else {
            setTimeout(function () {
                getdetail(itemNumId, fn, n += 1);
            }, 2000);
        }
    });
}

function getStockBySkuId(sku2info, skuId) {
    return sku2info[Number(skuId)] && sku2info[Number(skuId)].quantity;
}

function getModelByCode(modelProps, vid) {
    for (var i = 0; i < modelProps.length; i++) {
        if (modelProps[i].vid == vid) {
            return modelProps[i].name;
        }
    }
}

function getSizeByCode(sizeProps, vid) {
    for (var i = 0; i < sizeProps.length; i++) {
        if (sizeProps[i].vid == vid) {
            return sizeProps[i].name;
        }
    }
}

function getPropPathBySkuId(skus, skuId) {
    for (var i = 0; i < skus.length; i++) {
        if (skus[i].skuId == skuId) {
            return skus[i].propPath;
        }
    }
}

function isEmpty(obj) {
    for (var i in obj) {
        if (i) {
            return false;
        }
    }

    return true;
}